home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Info-Mac 4
/
Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso
/
Periodicals
/
CSMP
/
C.S.M.P. Digest, Issue 3.022
< prev
next >
Wrap
Internet Message Format
|
1994-06-09
|
91KB
From: pottier@clipper.ens.fr (Francois Pottier)
Subject: csmp-digest-v3-022
Date: Mon, 2 May 94 13:41:49 MET DST
C.S.M.P. Digest Mon, 02 May 94 Volume 3 : Issue 22
Today's Topics:
Best way to handle Moveable Modals?
Can you set the folder in which SFGetFile will open?
Control Panels items font
Fixed Point Math on PowerMac
Keeping DialogPtr's in RAM after startup...
Metrowerks News from MacWEEK
WaitNextEvent Emulated on PoMac!?
X2Fix code generation bug still in SC++ 7.0
The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
(pottier@clipper.ens.fr).
The digest is a collection of article threads from the internet newsgroup
comp.sys.mac.programmer. It is designed for people who read c.s.m.p. semi-
regularly and want an archive of the discussions. If you don't know what a
newsgroup is, you probably don't have access to it. Ask your systems
administrator(s) for details. If you don't have access to news, you may
still be able to post messages to the group by using a mail server like
anon.penet.fi (mail help@anon.penet.fi for more information).
Each issue of the digest contains one or more sets of articles (called
threads), with each set corresponding to a 'discussion' of a particular
subject. The articles are not edited; all articles included in this digest
are in their original posted form (as received by our news server at
nef.ens.fr). Article threads are not added to the digest until the last
article added to the thread is at least two weeks old (this is to ensure that
the thread is dead before adding it to the digest). Article threads that
consist of only one message are generally not included in the digest.
The digest is officially distributed by two means, by email and ftp.
If you want to receive the digest by mail, send email to listserv@ens.fr
with no subject and one of the following commands as body:
help Sends you a summary of commands
subscribe csmp-digest Your Name Adds you to the mailing list
signoff csmp-digest Removes you from the list
Once you have subscribed, you will automatically receive each new
issue as it is created.
The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
Questions related to the ftp site should be directed to
scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
digest are available there.
Also, the digests are available to WAIS users as comp.sys.mac.programmer.src.
-------------------------------------------------------
>From mahboud@aggroup.com (mahboud)
Subject: Best way to handle Moveable Modals?
Date: Fri, 08 Apr 1994 12:50:48 -0800
Organization: AG Group, Inc.
Hi.
What's the best way to handle moveable modals? Specifically, I want to be
able to do process(application) switches (i.e. put my app in the
background, while a moveable modal is foremost).
Prefereably I want to be able to do this by changing a filterproc, not by
going through the main event loop. I have tried putting WaitNextEvents in
the ModalFilterProc, but it did some weird things. One reason I want to
use the filterproc is that I still want to call ModalDialog to handle the
events in the window, so I don't have to worry about updates, etc..
Thanks,
mahboud
ps. I already handle moving the dialog from within my filterproc.
- -------------------------------------------------------------
Mahboud Zabetian
mahboud@aggroup.com
ag group, inc.
2540 camino diablo, suite 200
walnut creek, ca 94596
510-937-7900 voice
510-937-2479 fax
510-937-6704 ara
ftp.aggroup.com anonymous ftp
+++++++++++++++++++++++++++
>From mahboud@aggroup.com (mahboud)
Date: Sun, 10 Apr 1994 14:50:00 -0800
Organization: AG Group, Inc.
In article I wrote:
> What's the best way to handle moveable modals? Specifically, I want to be
> able to do process(application) switches (i.e. put my app in the
> background, while a moveable modal is foremost).
>
> Prefereably I want to be able to do this by changing a filterproc, not by
> going through the main event loop. I have tried putting WaitNextEvents in
> the ModalFilterProc, but it did some weird things. One reason I want to
> use the filterproc is that I still want to call ModalDialog to handle the
> events in the window, so I don't have to worry about updates, etc..
>
In response to all the mail I got, telling me to use the main event loop
and not a filter proc, I'd like to clarify a point.
I'd rather not use the main event loop, as I am retro fitting applications,
one modal dialog at a time, and by adding to the filter proc of each
existing dialog (most share the same filterproc), I would be making fewer
changes overall.
-mahboud
- -------------------------------------------------------------
Mahboud Zabetian
mahboud@aggroup.com
ag group, inc.
2540 camino diablo, suite 200
walnut creek, ca 94596
510-937-7900 voice
510-937-2479 fax
510-937-6704 ara
ftp.aggroup.com anonymous ftp
+++++++++++++++++++++++++++
>From Jens Alfke <jens_alfke@powertalk.apple.com>
Date: Wed, 13 Apr 1994 23:24:46 GMT
Organization: Apple Computer
mahboud, mahboud@aggroup.com writes:
> I'd rather not use the main event loop, as I am retro fitting applications,
> one modal dialog at a time, and by adding to the filter proc of each
> existing dialog (most share the same filterproc), I would be making fewer
> changes overall.
Given that you can't make them "modeless dialogs that won't let you switch to
another window", you can get most of the functionality by modifying the
filterProc. Users still won't be able to switch layers while your dialogs are
up, unfortunately, because ModalDialog disables layer switching.
In your filterProc:
* On mouseDown, call FindWindow. If the click is on the title bar of the
window, call DragWindow. Then change the event record to a nullEvent.
Optionally, you can also respond to command-clicks in other app windows'
title bars by dragging those windows without activating them.
* On update, check whether the target window is an application window other
than the dialog. If so, call whatever application routine handles update
events. If you don't do this, moving the dialog will leave permanent white
areas behind where the dialog used to be, as well as denying background time
to other apps (see the tech note "Pending Update Perils".)
--Jens Alfke
jens_alfke@powertalk Rebel girl, rebel girl,
.apple.com Rebel girl you are the queen of my world
+++++++++++++++++++++++++++
>From peter.lewis@info.curtin.edu.au (Peter N Lewis)
Date: Fri, 15 Apr 1994 09:46:34 +0800
Organization: NCRPDA, Curtin University
In article <1994Apr13.232446.4419@gallant.apple.com>, Jens Alfke
<jens_alfke@powertalk.apple.com> wrote:
>mahboud, mahboud@aggroup.com writes:
>> I'd rather not use the main event loop, as I am retro fitting applications,
>> one modal dialog at a time, and by adding to the filter proc of each
>> existing dialog (most share the same filterproc), I would be making fewer
>> changes overall.
>
>Given that you can't make them "modeless dialogs that won't let you switch to
>another window", you can get most of the functionality by modifying the
>filterProc. Users still won't be able to switch layers while your dialogs are
>up, unfortunately, because ModalDialog disables layer switching.
If you're going to do this, why not just write your own implementation of
ModalDialog? It's not that complicated, you just call WNE, and handle
events (passing most of them to IsDialogEvent and DialogSelect). You have
the same disadvantage of ModalDialog in that you aren't going thru your
main loop, so you can't handle AppleEvents and other things that would
normally get processed.
Peter.
_______________________________________________________________________
Peter N Lewis <peter.lewis@info.curtin.edu.au> Ph: +61 9 368 2055
+++++++++++++++++++++++++++
>From troy@i-link.com (Troy Gaul)
Date: Fri, 15 Apr 1994 18:53:08 -0500
Organization: I-Link, Ltd.
In article <peter.lewis-150494094634@rocky.curtin.edu.au>,
peter.lewis@info.curtin.edu.au (Peter N Lewis) wrote:
> In article <1994Apr13.232446.4419@gallant.apple.com>, Jens Alfke
> <jens_alfke@powertalk.apple.com> wrote:
>
> >mahboud, mahboud@aggroup.com writes:
> >> I'd rather not use the main event loop, as I am retro fitting applications,
> >> one modal dialog at a time, and by adding to the filter proc of each
> >> existing dialog (most share the same filterproc), I would be making fewer
> >> changes overall.
> >
> >Given that you can't make them "modeless dialogs that won't let you switch to
> >another window", you can get most of the functionality by modifying the
> >filterProc. Users still won't be able to switch layers while your dialogs are
> >up, unfortunately, because ModalDialog disables layer switching.
>
> If you're going to do this, why not just write your own implementation of
> ModalDialog? It's not that complicated, you just call WNE, and handle
> events (passing most of them to IsDialogEvent and DialogSelect). You have
> the same disadvantage of ModalDialog in that you aren't going thru your
> main loop, so you can't handle AppleEvents and other things that would
> normally get processed.
I've done this, and it's not too bad. Makes retrofitting and still getting
the AppleCorrect(tm) behavior fairly easy.
With a little thought (and depending on the design of your application),
you can even get this secondary event loop to handle high level events (if
appropriate). This is left as an exercise for the reader.
_troy
//////// //////___Troy Gaul____________________________t-gaul@i-link.com__
//
// // Infinity Systems ; West Des Moines, Iowa
//
// // // "Good news is just life's way of keeping you off balance" //
// //////___________________________________________________________ //
+++++++++++++++++++++++++++
>From Vampire@crypt.demon.co.uk (Vampire)
Date: Sun, 17 Apr 1994 09:10:37 GMT
Organization: Pennangalan Software
I've been watching this thread for a few days now...
The way I do this is a little Windows-inspired (don't all flame me, please...I
HATE Windows...unfortunately my employers don't...
I have a main event loop. (Surprise!). When I want to go Movable Modal, I get
the module with the Modal to create its Window as usual, then get it to call a
function 'RegisterModal', with the main control module. This function simply
registers a second event-loop (particular to the movable modal concerned), and
sets an internal Boolean, 'InModal', to TRUE.
The main event-loop examines InModal, and if it is TRUE, ALWAYS passes the
event onto the registered secondary event loop for handling. The secondary
function returns TRUE or FALSE, depending upon whether it handled the event or
not. If it didn't, the main-event loop can handle it as normal.
That way, the Movable Modal code gets to react to events concerning it, ignore
events that don't (e.g. update a background window), and *pretend* to react to
events it wants ignored (i.e. mousedowns in another Window of the same
application).
=============================================================================
|"If I knock on your door, you're a fool;
VAMPIRE | if you invite me in, you're a dead fool"
(Pennangalan Software) | My dust resides @crypt.demon.co.uk
=============================================================================
---------------------------
>From blume@twg.com (David Blume)
Subject: Can you set the folder in which SFGetFile will open?
Date: Fri, 15 Apr 1994 00:28:03 GMT
Organization: Gokuraku Videos - Wollongong Dept.
Can you set the folder in which SFGetFile and SFPutFile will open?
--David
+---------------------------------------------------------------+
| David Blume | "I get tired thinking of all the things I |
| blume@twg.com | don't want to do." --Bukowski, _Barfly_ |
+---------------------------------------------------------------+
+++++++++++++++++++++++++++
>From dubois@primate.wisc.edu (Paul DuBois)
Date: 14 Apr 1994 20:38:06 -0500
Organization: Castra Parvulorum
>From article <1994Apr15.002803.14161@twg.com>, by blume@twg.com (David Blume):
> Can you set the folder in which SFGetFile and SFPutFile will open?
This is how I do it if I have an FSSpec:
CurDirStore = fss.parID;
SFSaveDisk = -fss.vRefNum;
Note that you use the negative of the vRefNum.
I think this is horrendous, because it involves assigning values to
two low-memory globals. Is there another way to do it?
--
Paul DuBois
dubois@primate.wisc.edu
+++++++++++++++++++++++++++
>From stk@uropax.contrib.de (Stefan Kurth)
Date: 17 Apr 1994 01:50:56 +0200
Organization: Contributed Software GbR
In article <2okr5uINN970@uakari.primate.wisc.edu>,
Paul DuBois <dubois@primate.wisc.edu> wrote:
> CurDirStore = fss.parID;
> SFSaveDisk = -fss.vRefNum;
>
> I think this is horrendous, because it involves assigning values to
> two low-memory globals.
Exactly.
> Is there another way to do it?
If you can require System 7, yes. (the original poster asked about
SFGetFile, so maybe this won't help him). Do a CustomGetFile; in your
dlgHook you check for sfHookFirstCall, and if you receive it, change your
reply record to whatever location you want to have displayed, and return
sfHookChangeSelection. This has the additional advantage that you can
specify a certain file to be selected.
(You'll have to pass the address of the reply record in the yourDataPtr
parameter if you don't want to make it a global var).
_____________________________________________________________________
Stefan Kurth Berlin, Germany stk@contrib.de
+++++++++++++++++++++++++++
>From pottier@kayak.ens.fr (Francois Pottier)
Date: 17 Apr 1994 21:24:12 GMT
Organization: Ecole Normale Superieure, PARIS, France
In article <2optl1$57h@uropax.contrib.de>,
Stefan Kurth <stk@uropax.contrib.de> wrote:
>dlgHook you check for sfHookFirstCall, and if you receive it, change your
>reply record to whatever location you want to have displayed, and return
>sfHookChangeSelection. This has the additional advantage that you can
>specify a certain file to be selected.
If you want this to work, you also have to set sfScript to 0.
I know it isn't mentioned in Inside Mac, but it's true. Took
me days to figure out (thanks to Jon Watte's FAQ for pointing
it out!)
--
Francois Pottier
pottier@dmi.ens.fr
---------------------------
>From alex@metcalf.demon.co.uk (Alex Metcalf)
Subject: Control Panels items font
Date: Fri, 8 Apr 1994 23:20:33 GMT
Organization: Demon Internet
This is a slightly dumb question...
How do you set the font for the DITL resource for a control panel? I've
often opened up ResEdit to find the control panel's DITL displayed in
Geneva 9 (such as check boxes and static text), but I can't seem to change
from the default Chicago 12.
Thanks,
Alex
--
Alex Metcalf, Mac programmer in C, C++, HyperTalk, assembler
Internet, AOL, BIX: alex@metcalf.demon.co.uk "Surely you
AppleLink: alex@metcalf.demon.co.uk@internet# can't be
CompuServe: INTERNET:alex@metcalf.demon.co.uk serious?"
Delphi: alex@metcalf.demon.co.uk@inet#
FirstClass: alex@metcalf.demon.co.uk,Internet "I'm serious...
Fax (UK): (0570) 45636 and don't call
Fax (US / Canada): 011 44 570 45636 me Shirley."
+++++++++++++++++++++++++++
>From bjaques@vanbc.wimsey.com (Barton Jaques)
Date: 10 Apr 1994 20:43:53 GMT
Organization: Wimsey Information Services
In article <alex-090494002008@metcalf.demon.co.uk>,
alex@metcalf.demon.co.uk (Alex Metcalf) wrote:
> How do you set the font for the DITL resource for a control panel? I've
> often opened up ResEdit to find the control panel's DITL displayed in
> Geneva 9 (such as check boxes and static text), but I can't seem to change
> from the default Chicago 12.
In your cdev code, just set TextFont() to whatever you desire, before any
drawing is done. Be sure to change it back whenever your code exits.
You can change the ResEdit view font under "View As …" in the DITL editor.
That only changes how it appears in ResEdit, though; it has no effect on
the DITL resource contents.
--
bjaques@wimsey.com
+++++++++++++++++++++++++++
>From Reid Ellis <rae@alias.com>
Date: Sat, 16 Apr 1994 03:47:27 GMT
Organization: Alias Research, Inc., Toronto ON Canada
Alex Metcalf <alex@metcalf.demon.co.uk> asks:
|How do you set the font for the DITL resource for a control panel?
Barton Jaques <bjaques@vanbc.wimsey.com> replies:
|In your cdev code, just set TextFont() to whatever you desire, before
|any drawing is done. Be sure to change it back whenever your code
|exits.
Alternatively, include a 'finf' resource, id=-4049, and set its three
16-bit ints to the font id, style, and size you want [in that order].
Caveat: I've been having problems with 'useWFont' popup menus in
combination with the 'finf' resource under System 7.0 [it's fine under
System 7.1]
Reid
--
- -
Reid Ellis, Alias Research Inc.
+1 416 362 9181 <rae@Alias.com>
---------------------------
>From Willie Rauchwerger <willie-rauchwerger@uokhsc.edu>
Subject: Fixed Point Math on PowerMac
Date: 6 Apr 1994 21:22:02 GMT
Organization: OU Health Sciences Center
My image manipluation software uses fixed-point math for matrix
math. However, in my PowerPC port, I am getting hardly no
performance boost (seems slower to me) when I hit the matrix
calcuations.
After running TrapsCheck (very cool stuff), I find that the Fixed
point math routines are not native. Ugh.
After deciding not to do floating point because of speed, finding
that Fixed-point calculations are slower now is not too funny.
I would like to keep it using fixed point so that I can get good
performance regardless of processor.
Any ideas aobut how to get around this? Any ideas when the Fixed
point routines will be native?
Any separate libraries to do fixed point calculations?
- -----------------------------------------------------------------
Willie Rauchwerger AppleLink: Willie
Telemedicine Software Guy Internet: willie-rauchwerger@uokhsc.edu
OU Health Sciences Center
+++++++++++++++++++++++++++
>From zstern@adobe.com (Zalman Stern)
Date: Wed, 6 Apr 1994 22:50:44 GMT
Organization: Adobe Systems Incorporated
Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes
> My image manipluation software uses fixed-point math for matrix
> math. However, in my PowerPC port, I am getting hardly no
> performance boost (seems slower to me) when I hit the matrix
> calcuations.
>
> After running TrapsCheck (very cool stuff), I find that the Fixed
> point math routines are not native. Ugh.
Fixed point routines are not handled via traps for native code. Rather they
are in the shared library InterfaceLib. This is a godd idea as already in
68K land people were using skanky hacks to get around the trap dispatcher
overhead for the fixed-point math code.
For emulated code, the cost of doing a mixed mode switch to native mode
outweighs the benefit of faster antive mode execution. (Especially since the
emualtor is going to be executing native multiply instructions anyway at the
bottom level.)
--
Zalman Stern zalman@adobe.com (415) 962 3824
Adobe Systems, 1585 Charleston Rd., POB 7900, Mountain View, CA 94039-7900
"Do right, and risk consequences." Motto of Sam Houston (via Molly Ivins)
+++++++++++++++++++++++++++
>From fixer@faxcsl.dcrt.nih.gov (Chris Gonna' Find Ray Charles Tate)
Date: Wed, 6 Apr 1994 23:46:17 GMT
Organization: DCRT, NIH, Bethesda, MD
In article <1994Apr6.225044.12892@adobe.com>, zstern@adobe.com (Zalman Stern) writes:
>Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes
>>
>> My image manipluation software uses fixed-point math for matrix
>> math. However, in my PowerPC port, I am getting hardly no
>> performance boost (seems slower to me) when I hit the matrix
>> calcuations.
>
>For emulated code, the cost of doing a mixed mode switch to native mode
>outweighs the benefit of faster native mode execution. (Especially since the
>emualtor is going to be executing native multiply instructions anyway at the
>bottom level.)
Is fixed-point still going to be faster on the PowerPC than floating-
point? It may not, since the PPC's floating-point unit is so much
faster than (say) the MC6888x's. If someone could come up with some
hard figures for this, it'd be handy. Zalman? Anyone?
(I *think* I remember hearing that for most things - like, anything
more complex than loop counting and such - floating-point is going to
be faster on the PPC than integer math. Am I right, or hallucinating
again?)
- -------------------------------------------------------------------
Christopher Tate | "Blue ice cubes? How degenerate!"
MSD, Inc. |
fixer@faxcsl.dcrt.nih.gov | < anybody recognize the source? >
+++++++++++++++++++++++++++
>From jwbaxter@olympus.net (John W. Baxter)
Date: Wed, 06 Apr 1994 18:24:34 -0700
Organization: Internet for the Olympic Peninsula
In article <1994Apr6.234617.11486@alw.nih.gov>, fixer@faxcsl.dcrt.nih.gov
(Chris Gonna' Find Ray Charles Tate) wrote:
> Is fixed-point still going to be faster on the PowerPC than floating-
> point? It may not, since the PPC's floating-point unit is so much
> faster than (say) the MC6888x's. If someone could come up with some
> hard figures for this, it'd be handy. Zalman? Anyone?
>
> (I *think* I remember hearing that for most things - like, anything
> more complex than loop counting and such - floating-point is going to
> be faster on the PPC than integer math. Am I right, or hallucinating
> again?)
It seems to me that working out the details is going to be tough, and
variable over time. I *suspect* that switching *some* operations to
floating point will speed things up, just because the processor can do more
things at once that way. IF you're looking at code which has had
instruction scheduling applied to it, and IF the compiler you are using
does a good job of that (that's the part likely to vary over time).
Bottom line: beware the quick and dirty "benchmark" in this area. For
now, write your code in the most convenient (for
writing/understanding/maintenance) way. [There was a flap a while back
about one of the compilers not strength-reducing loops over arrays from
multiplies to adds. My particular quick and dirty "benchmark" (not to be
trusted) suggested that on PPC it makes no difference (so why should the
compiler bother, except to avoid folks complaining about "poor
optimization").]
--
John Baxter Port Ludlow, WA, USA [West shore, Puget Sound]
jwbaxter@pt.olympus.net
+++++++++++++++++++++++++++
>From johnmce@world.std.com (John McEnerney)
Date: Thu, 7 Apr 1994 16:35:02 GMT
Organization: The World Public Access UNIX, Brookline, MA
[There was a flap a while back
about one of the compilers not strength-reducing loops over arrays from
multiplies to adds. My particular quick and dirty "benchmark" (not to be
trusted) suggested that on PPC it makes no difference (so why should the
compiler bother, except to avoid folks complaining about "poor
optimization").]
Floating-point adds take about the same time as multiplies (1 more cycle
unless it is single-precision). Integer adds are -considerably- quicker
than integer multiples: 1 cycle vs. 5 or 9.
> Is fixed-point still going to be faster on the PowerPC than floating-
> point?
Again, it depends on the distribution of the operations. Integer
multiplies and divides are -way- slower than floating-point. Adds/subs
are -way- faster.
For any compiler that does instruction scheduling, you'll probably get
better results using floating-point, because the floating-point
arithmetic can operate in parallel with the integer instructions used for
loops, branches, etc.
-- John
+++++++++++++++++++++++++++
>From 103t_english@west.cscwc.pima.edu
Date: 8 Apr 94 01:19:50 MST
Organization: (none)
In article <2nv95q$5at@romulus.ucs.uoknor.edu>, Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes:
> My image manipluation software uses fixed-point math for matrix
> math. However, in my PowerPC port, I am getting hardly no
> performance boost (seems slower to me) when I hit the matrix
> calcuations.
>
> After running TrapsCheck (very cool stuff), I find that the Fixed
> point math routines are not native. Ugh.
>
> After deciding not to do floating point because of speed, finding
> that Fixed-point calculations are slower now is not too funny.
> I would like to keep it using fixed point so that I can get good
> performance regardless of processor.
>
> Any ideas aobut how to get around this? Any ideas when the Fixed
> point routines will be native?
>
> Any separate libraries to do fixed point calculations?
>
> -------------------------------------------------------------------
> Willie Rauchwerger AppleLink: Willie
> Telemedicine Software Guy Internet: willie-rauchwerger@uokhsc.edu
> OU Health Sciences Center
Since you are claiming a need for critical speed, I wonder why you bother with
the overhead of the Fixed-Point trap on the 68K side anyways?
Rolling your own 68k fixedpoint routines will save you 100+ CPU cycles for
every fixed-point call as that is the overhead of the trap dispatcher.
As I understand it, there is no trap dispatcher on the PowerMac: the emulator
does it automatically. However, that don't mean that you should be happy with
the result either way.
Having read this thread backwards, I note that the PowerMac doesn't do native
fixed point due to the overhead from the Mixed Mode manager. Why not roll your
own routines for both 68K and PowerMac and use each as it is appropriate,
thereby avoiding the trap dispatcher on the 68k Macs and the emulator overhead
on the PowerMacs?
Lawson
+++++++++++++++++++++++++++
>From d88-jwa@hemul.nada.kth.se (Jon W‰tte)
Date: 8 Apr 1994 09:58:42 GMT
Organization: The Royal Institute of Technology
>fixed point due to the overhead from the Mixed Mode manager. Why not roll your
>own routines for both 68K and PowerMac and use each as it is appropriate,
>thereby avoiding the trap dispatcher on the 68k Macs and the emulator overhead
>on the PowerMacs?
Why not define macros for your data representation and manipulation,
and have it use single-precision floats on the PPC and fixeds on 68K?
That way, you get the superior math performance on the PPC (where
float multiplies/divides are faster than integer) and keep the speed
on the 68K. And, yes, implementing your own fixed math macros is
pretty much a must.
--
-- Jon W{tte, h+@nada.kth.se, Mac Hacker Deluxe --
This article printed on 100% recycled electrons.
+++++++++++++++++++++++++++
>From Willie Rauchwerger <willie-rauchwerger@uokhsc.edu>
Date: 8 Apr 1994 14:42:46 GMT
Organization: OU Health Sciences Center
In article <2o39si$673@news.kth.se> Jon W!tte, d88-jwa@hemul.nada.kth.se
writes:
>Why not define macros for your data representation and manipulation,
>and have it use single-precision floats on the PPC and fixeds on 68K?
>That way, you get the superior math performance on the PPC (where
>float multiplies/divides are faster than integer) and keep the speed
>on the 68K. And, yes, implementing your own fixed math macros is
>pretty much a must.
OK. It is obvious to me that I need to roll my own fixed point routines.
My question is whether there are any out there right now that people
have used to get around the trap overhead, or do I really need to roll
my own. (I think I can handle most of it, but I worry about it being
entirrly correct, and those trig functions...)
My next question is, how can floating point be faster than integer
math on the PowerPC (or any processor for that matter)? It would
seem to me that no matter how fast fp is, integer should faster -
otherwise, should I start using fp for counters, etc. :-)
- -----------------------------------------------------------------
Willie Rauchwerger AppleLink: Willie
Telemedicine Software Guy Internet: willie-rauchwerger@uokhsc.edu
OU Health Sciences Center
+++++++++++++++++++++++++++
>From d88-jwa@dront.nada.kth.se (Jon W‰tte)
Date: 8 Apr 1994 15:40:13 GMT
Organization: The Royal Institute of Technology
In <2o3qh6$b2c@romulus.ucs.uoknor.edu> Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes:
>My next question is, how can floating point be faster than integer
>math on the PowerPC (or any processor for that matter)? It would
>seem to me that no matter how fast fp is, integer should faster -
>otherwise, should I start using fp for counters, etc. :-)
The integer unit is not designed the same as the floating-point
unit, and the FP unit kicks some serious butt.
The only thing preventing you from using floating point registers
for counters is that you can't index using floating-point registers,
and the conversion to integer is slow. Else, go ahead! (addition
and subtraction of course aren't faster in FP, but multiply and
divide are)
Cheers,
/ h+
--
-- Jon W{tte, h+@nada.kth.se, Mac Hacker Deluxe --
"If people bought cars according to the same principles they buy computers,
cars would behave like Lamborghinis but would be built and look like Yugos."
-- Craig Fields
+++++++++++++++++++++++++++
>From rmcassid@uci.edu (Robert Cassidy)
Date: Fri, 08 Apr 1994 09:45:15 -0700
Organization: TLG Project
In article <2o3tst$99f@news.kth.se>, d88-jwa@dront.nada.kth.se (Jon Wtte)
wrote:
> In <2o3qh6$b2c@romulus.ucs.uoknor.edu> Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes:
>
> >My next question is, how can floating point be faster than integer
> >math on the PowerPC (or any processor for that matter)? It would
> >seem to me that no matter how fast fp is, integer should faster -
> >otherwise, should I start using fp for counters, etc. :-)
>
> The integer unit is not designed the same as the floating-point
> unit, and the FP unit kicks some serious butt.
>
> The only thing preventing you from using floating point registers
> for counters is that you can't index using floating-point registers,
> and the conversion to integer is slow. Else, go ahead! (addition
> and subtraction of course aren't faster in FP, but multiply and
> divide are)
Doesn't the integer unit handle all of the register loading as well?
Wouldn't that be even more incentive to use the fp unit in certain
instances?
--
Robert Cassidy
TLG Project
UC Irvine
Let's hope 'Information SuperTollroad' isn't the catchphrase of the next
decade...
+++++++++++++++++++++++++++
>From cforden@netcom.com (Chris Forden)
Date: Fri, 8 Apr 1994 16:57:41 GMT
Organization: NETCOM On-line Communication Services (408 241-9760 guest)
Excerpted from my upcoming article in the May issue of
MacTech--
Clever programmers of 68K Macs have done the fastest
calculations with integer arithmetic. For instance, the
calculation of screen position of 2D CAD objects can be done
quickest using the long (32 bit) integer arithmetic available
on the 68020 and better. (The FixMath routines in those
machines’s ROM automatically make use of the extended
instructions.) Some programmers were even willing to put up
the aggravation of doing all the worst-case analyses of
overflow and underflow needed to use fixed-point math routines
reliably.
However, on the PowerPC, the floating point performance is so
much improved that now one gets faster execution by using
floating point routines than by using fixed point arithmetic in
any case where precautions would need to be taken against
overflow error or precision loss due to underflow. Those two
enemies of integer arithmetic– overflow and underflow– ravage
more fixed point math schemes than programmers expect a priori.
Therefore calculating with floating point is generally much
easier than adapting fixed-point arithmetic to one’s needs.
So how much faster is floating point? A friend of mine timed
various implementations of an FFT-based image processing
algorithm running on several Mac platforms. Here are his
results tabularized, including single precision floating point,
for a one-way 512 x 512 FFT:
IIci w/cache Power Mac proto
------------ ---------------
integer 52 sec 14.5 sec
single float 80 sec 3 sec
Integer arithmetic on the Power Mac prototype was about the
same as the Quadra 840av’s, but single precision float on the
Power Mac was 4.5 times faster than the faster (integer with
special long mul assembly) arithmetic on Q840av. We were using
a bottom-of-the-line Power Mac prototype, running at only 50
MHz.
Double-precision floating point on the PowerPC is only 0% to 20%
slower than single-precision floating point. The 64 bits of
the double-precision format mean you have great freedom from
precision loss. The PowerPC also has a multiply-and-add
instruction, often called “multiply and accumulate”. It
combines a multiplication and an addition into a single
instruction. Many signal processing programs for audio or
images can make heavy use of that instruction, which optimizing
--
cforden@netcom.com 's self-referential signature quote: "Huh?"
+++++++++++++++++++++++++++
>From 103t_english@west.cscwc.pima.edu
Date: 9 Apr 94 16:30:50 MST
Organization: (none)
In article <2o3qh6$b2c@romulus.ucs.uoknor.edu>, Willie Rauchwerger <willie-rauchwerger@uokhsc.edu> writes:
> In article <2o39si$673@news.kth.se> Jon W!tte, d88-jwa@hemul.nada.kth.se
> writes:
>>Why not define macros for your data representation and manipulation,
>>and have it use single-precision floats on the PPC and fixeds on 68K?
>>That way, you get the superior math performance on the PPC (where
>>float multiplies/divides are faster than integer) and keep the speed
>>on the 68K. And, yes, implementing your own fixed math macros is
>>pretty much a must.
>
> OK. It is obvious to me that I need to roll my own fixed point routines.
> My question is whether there are any out there right now that people
> have used to get around the trap overhead, or do I really need to roll
> my own. (I think I can handle most of it, but I worry about it being
> entirrly correct, and those trig functions...)
>
> My next question is, how can floating point be faster than integer
> math on the PowerPC (or any processor for that matter)? It would
> seem to me that no matter how fast fp is, integer should faster -
> otherwise, should I start using fp for counters, etc. :-)
>
FP adds and subtracts are every bit as fast as fixed point adds and subtracts.
In fact, I understand that it is possible to get extra speed out of the 601 by
using fp indexes in loops...
Lawson
+++++++++++++++++++++++++++
>From jwbaxter@olympus.net (John W. Baxter)
Date: Thu, 14 Apr 1994 01:14:02 -0700
Organization: Internet for the Olympic Peninsula
In article <2nv95q$5at@romulus.ucs.uoknor.edu>, Willie Rauchwerger
<willie-rauchwerger@uokhsc.edu> wrote:
> After deciding not to do floating point because of speed...
A preconception which has long been true, on a wide variety of hardware.
But...you may well find that using float (the 4-byte form) on PPC is the
right way to go. Run your time trials on your program built that way (and
let us know how they come out). [Enabling the Instruction Scheduling
optimization could well be important here. If you're using a compiler
which does it well or even semi-well.]
--
John Baxter Port Ludlow, WA, USA [West shore, Puget Sound]
jwbaxter@pt.olympus.net
+++++++++++++++++++++++++++
>From Dave Falkenburg <falken@apple.com>
Date: Fri, 15 Apr 1994 16:30:31 GMT
Organization: Apple Computer, Inc.
In article <1994Apr8.011950.1@west.cscwc.pima.edu> ,
103t_english@west.cscwc.pima.edu writes:
>Having read this thread backwards, I note that the PowerMac doesn't do
native
>fixed point due to the overhead from the Mixed Mode manager. Why not
roll your
>own routines for both 68K and PowerMac and use each as it is appropriate,
>thereby avoiding the trap dispatcher on the 68k Macs and the emulator
overhead
>on the PowerMacs?
Many of the FixMath routines are "split" traps, which do not support
patching
anymore. On PowerPC, they are implemented inside InterfaceLib directly,
and
are not called through the trap dispatcher...
-Dave Falkenburg
-Apple Computer, Inc.
+++++++++++++++++++++++++++
>From 103t_english@west.cscwc.pima.edu
Date: 17 Apr 94 08:09:19 MST
Organization: (none)
In article <1994Apr15.163031.5662@gallant.apple.com>, Dave Falkenburg <falken@apple.com> writes:
> In article <1994Apr8.011950.1@west.cscwc.pima.edu> ,
> 103t_english@west.cscwc.pima.edu writes:
>>Having read this thread backwards, I note that the PowerMac doesn't do
> native
>>fixed point due to the overhead from the Mixed Mode manager. Why not
> roll your
>>own routines for both 68K and PowerMac and use each as it is appropriate,
>>thereby avoiding the trap dispatcher on the 68k Macs and the emulator
> overhead
>>on the PowerMacs?
>
> Many of the FixMath routines are "split" traps, which do not support
> patching
> anymore. On PowerPC, they are implemented inside InterfaceLib directly,
> and
> are not called through the trap dispatcher...
>
> -Dave Falkenburg
> -Apple Computer, Inc.
I take it that they are "native" then?
Lawson
---------------------------
>From rrose@CSOS.ORST.EDU (-= Godfather Moof =-)
Subject: Keeping DialogPtr's in RAM after startup...
Date: 13 Apr 1994 23:44:59 GMT
Organization: CS Outreach Services, Oregon State University, Corvallis, OR, USA
I'm writing an INIT that I would like to load a DialogPtr into ram at
startup so that the trap macro I am patching can use it later. So far
I've tryed converting the ptr to a handle and locking the handle, but without
success. I've tryed just opening up the file the Dialog Box is located in,
but that's to much of a hassle in case the dialog resource gets deleted,
(which it might).
Can anyone help?
/-/
Dogcow lives... ___/ /__
/__ ___/
Godfather Moof: | / /| |
rrose@csos.orst.edu |/_/ | |
| | | |
He'll make you an offer you can't refuse. | | |
|
+++++++++++++++++++++++++++
>From zobkiw@datawatch.com (joe zobkiw)
Date: Thu, 14 Apr 1994 20:41:09 GMT
Organization: Datawatch Corporation
In article <2oi05r$jco@jadzia.CSOS.ORST.EDU>, rrose@CSOS.ORST.EDU (-=
Godfather Moof =-) wrote:
> I'm writing an INIT that I would like to load a DialogPtr into ram at
> startup so that the trap macro I am patching can use it later. So far
> I've tryed converting the ptr to a handle and locking the handle, but without
> success. I've tryed just opening up the file the Dialog Box is located in,
> but that's to much of a hassle in case the dialog resource gets deleted,
> (which it might).
>
Forget abou it. Simply (at INIT time) call the following routine (passing
CurResFile() as the refNum) to learn where your INIT is. Then, in your
patch, when you need access to your resources, simply open the INIT file
and use the resources. Don't forget to close it when you are done.
OSErr FindFileSpec(short refNum, short *foundVRefNum, long *foundDirID,
unsigned char *fileName)
{
FCBPBRec pb;
OSErr err = noErr;
pb.ioCompletion = NULL;
pb.ioNamePtr = fileName;
pb.ioVRefNum = 0;
pb.ioRefNum = refNum;
pb.ioFCBIndx = 0;
err = PBGetFCBInfoSync(&pb);
*foundVRefNum = pb.ioFCBVRefNum;
*foundDirID = pb.ioFCBParID;
return err;
}
___________________________________________________________
_/_/_/_/ Joe Zobkiw ,,,
_/ Senior Software Engineer - -
_/ Datawatch Corporation L
_/_/_/_/ zobkiw@datawatch.com -
+++++++++++++++++++++++++++
>From petm@soda.berkeley.edu (Peter Mattis)
Date: 16 Apr 1994 23:29:00 GMT
Organization: Computer Science Undergrad Assoc., UCBerkeley
In article <zobkiw-140494154109@zobkiw.datawatch.com>,
joe zobkiw <zobkiw@datawatch.com> wrote:
>In article <2oi05r$jco@jadzia.CSOS.ORST.EDU>, rrose@CSOS.ORST.EDU (-=
>Godfather Moof =-) wrote:
>
>> I'm writing an INIT that I would like to load a DialogPtr into ram at
>> startup so that the trap macro I am patching can use it later. So far
>> I've tryed converting the ptr to a handle and locking the handle, but without
>> success. I've tryed just opening up the file the Dialog Box is located in,
>> but that's to much of a hassle in case the dialog resource gets deleted,
>> (which it might).
>>
>
>Forget abou it. Simply (at INIT time) call the following routine (passing
>CurResFile() as the refNum) to learn where your INIT is. Then, in your
>patch, when you need access to your resources, simply open the INIT file
>and use the resources. Don't forget to close it when you are done.
[SNIP]
Yes, but what happens if the user moves the init file? (Hmm...bit of a
problem, isn't it?)
The method I used for displaying a dialog box in the manner you
describe is to get the handle to the 'DITL' (dialog items list) resource
at start time. Remember to call DetachResource and HLock the handle.
This handle can then be used in a call to NewDialog to create a dialog
with the your items in it.
Be careful and make sure the item list doesn't get deleted somewhere
along the line.
-Peter Mattis
+++++++++++++++++++++++++++
>From ari@world.std.com (Ari I Halberstadt)
Date: Sun, 17 Apr 1994 03:22:03 GMT
Organization: The World Public Access UNIX, Brookline, MA
In article <2opsbs$jed@agate.berkeley.edu>,
Peter Mattis <petm@soda.berkeley.edu> wrote:
>
>The method I used for displaying a dialog box in the manner you
>describe is to get the handle to the 'DITL' (dialog items list) resource
>at start time. Remember to call DetachResource and HLock the handle.
>This handle can then be used in a call to NewDialog to create a dialog
>with the your items in it.
>
>Be careful and make sure the item list doesn't get deleted somewhere
>along the line.
You would also have to ensure that the dialog only accesses resources
from the system file. For instance, you couldn't specify a popup
control using 'CNTL' and 'MENU' resources. You could write code to
create the popup menu on the fly, or you could write code to create
the control and menu by saving copies of the resources, and then
attach the popup to the dialog. It's easier, as suggested in a prior
post, just to open the extension's resource file before creating the
dialog. I don't think it's too unreasonable to expect an extension to
be able to find its own file or some preferences file. If the user
goes and moves the file, a simple alert (or notification manager
alert) could issue a gentle admonishment.
--
Ari Halberstadt ari@world.std.com #include <std/disclaimer.h>
"These beetles were long considered to be very rare because very few
entomologists look for beetles in the mountains, in winter, at night,
during snow storms." -- Purves W. K., et al, "Life: The Science of
---------------------------
>From Robert Hess <robert_hess@macweek.ziff.com>
Subject: Metrowerks News from MacWEEK
Date: Sat, 9 Apr 1994 02:35:44 GMT
Organization: MacWEEK
As a service, here are some snippets from Monday!s MacWEEK. I'll try to do
this in the future when there's developer-related news but it will be as
time permits...
St. Laurent, Quebec -- Metrowerks Inc., the developer community's bold new
kid on the block, has received a big boost from a formidable ally, IBM
Corp., and will announce several major additions to its CodeWarrior
product this week.
Metrowerks has formed an agreement with IBM which gives Metrowerks access
to Big Blue's compiler optimization technology for current and future
PowerPC processors. As a result, Mac developers will have access to the
best PowerPC code generators available, said Jean Belanger, Metrowerks'
chairman. "In addition to having the fastest compiler, we'll be able to
generate the fastest code," he said.
At Apple's Worldwide Developers Conference next month Metrowerks will
ship:
MPW MW CW: Metrowerks will make its native and 680x0 compilers available
to users of Apple's Macintosh Programmer's Workshop. The combination will
bring CodeWarrior's speed and MPW's large project- and team-management
tools together.
Native-hosted 68K codegen: Metrowerks President and CEO Greg Galanos said,
"The new compiler is four to five times as fast as our 680x0-based
compiler and eight times as fast as Think."
Metrowerks will ship its 680x0 and PowerPC compilers as fat binaries, so
both can run and generate code for either processor line. The MPW-hosted
compiler will be included free.
Since developers feel Apple has not committed to continue supporting the
language, Metrowerks will introduce an Object Pascal version of its
compiler by year-end.
Metrowerks is now bundling CodeWarrior with NeoLogic Systems' NeoPersist,
an object-oriented data storage utility for programmers. An encrypted copy
of NeoAccess, an object-oriented database extension of NeoPersist, is also
included; users can upgrade for $649.
Metrowerks plans to open its first U.S. office in Austin, Texas, June 1.
The Austin office will be the headquarters of the technical support,
quality assurance and sales divisions.
[For the full text, see MacWEEK or ZiffNet on CompuServe, eWorld or
AppleLink]
========================================================================
Robert Hess, WEEKgeek robert_hess@macweek.ziff.com
MacWEEK AppleLink: WNDZSX
301 Howard CompuServe: 72511,333
San Francisco, Calif. 94105 America Online: MacWEEK
(415) 243-3576 days MCI: RHESS
(415) 243-3651 fax
(415) 647-5549 nights I speak for myself.
now doesn!t that make you feel better? And sometimes not even that.
========================================================================
+++++++++++++++++++++++++++
>From gewekean@studentg.msu.edu (Andrew Geweke)
Date: Sat, 9 Apr 1994 01:08:09 -0400
Organization: Michigan State University
In article <Cnz0JL.5v9@zcias2.ziff.com>, Robert Hess
<robert_hess@macweek.ziff.com> writes:
> As a service, here are some snippets from Monday!s MacWEEK. I'll try to
> do this in the future when there's developer-related news but it will
> be as time permits...
Thank you very much for this! There are obviously lots of people who still
can't really get MacWEEK.
> St. Laurent, Quebec -- Metrowerks Inc., the developer community's bold
> new kid on the block, has received a big boost from a formidable ally,
> IBM Corp., and will announce several major additions to its CodeWarrior
> product this week.
>
> Metrowerks has formed an agreement with IBM which gives Metrowerks
> access to Big Blue's compiler optimization technology for current and
> future PowerPC processors. As a result, Mac developers will have access
> to the best PowerPC code generators available, said Jean Belanger,
> Metrowerks' chairman. "In addition to having the fastest compiler, we'
> ll be able to generate the fastest code," he said.
Am I the only one saying Wow? I've heard only huge rave reviews about IBM's
compilers, but figured they were only available with the Macintosh on RISC
SDK. Great!
+++++++++++++++++++++++++++
>From sw@network-analysis-ltd.co.uk (Sak Wathanasin)
Date: Sat, 9 Apr 94 09:34:08 GMT
Organization: Network Analysis Ltd
In article <Cnz0JL.5v9@zcias2.ziff.com> (comp.sys.mac.programmer), Robert Hess <robert_hess@macweek.ziff.com> writes:
> Metrowerks will ship its 680x0 and PowerPC compilers as fat binaries, so
> both can run and generate code for either processor line. The MPW-hosted
> compiler will be included free.
Will this apply retrospectively to those of us who bought DR1 (2,3..)?
Or do I have to buy the MPW-hosted compiler separately? If the latter, where
do I get it from?
Sak Wathanasin
Network Analysis Limited
178 Wainbody Ave South, Coventry CV3 6BX, UK
Internet: sw@network-analysis-ltd.co.uk
uucp: ...!uknet!nan!sw AppleLink: NAN.LTD
Phone: (+44) 203 419996 Mobile:(+44) 850 587411 Fax: (+44) 203 690690
+++++++++++++++++++++++++++
>From zstern@adobe.com (Zalman Stern)
Date: Sat, 9 Apr 1994 08:41:27 GMT
Organization: Adobe Systems Incorporated
Andrew Geweke writes
> Am I the only one saying Wow? I've heard only huge rave reviews about
IBM's
> compilers, but figured they were only available with the Macintosh on RISC
> SDK. Great!
IBM's compilers are *not* on the Macintosh on RISC SDK. They are only
available for IBM's AIX operating system.
--
Zalman Stern zalman@adobe.com (415) 962 3824
Adobe Systems, 1585 Charleston Rd., POB 7900, Mountain View, CA 94039-7900
"Do right, and risk consequences." Motto of Sam Houston (via Molly Ivins)
+++++++++++++++++++++++++++
>From johnmce@world.std.com (John McEnerney)
Date: Sat, 9 Apr 1994 09:03:06 GMT
Organization: The World Public Access UNIX, Brookline, MA
> Metrowerks has formed an agreement with IBM which gives Metrowerks
> access to Big Blue's compiler optimization technology for current and
> future PowerPC processors. As a result, Mac developers will have access
> to the best PowerPC code generators available, said Jean Belanger,
> Metrowerks' chairman. "In addition to having the fastest compiler, we'
> ll be able to generate the fastest code," he said.
So that the rumours don't fly to far too fast on this one, let me clarify
the situation as it will affect you, the users.
We have an agreement which says that as I develop the next version
of our PowerPC code generator, I'm free to ask for advice, experiences,
etc. from some of the guys at IBM's Watson Research Center where the
POWER architecture was originally designed. It turns out much of my
current code generator design is already based on some papers that they
wrote at Watson anyway. They are willing to be pretty free with their
experience, but I imagine they will also keep some tricks to themselves.
No source code is involved, at least not to my knowledge. The important
point is that Metrowerks is going to invest pretty much 100% of my time
developing aggressive global optimization for future versions of our
product. How closely we compare with IBMs xlc compilers depends mostly on
how good a job I do at that. Our agreement with IBM is an offshoot of a
relationship we have with some great guys in IBM Microelectronics, who
want to see the PowerPC chip succeed and see Apple's broad market
penetration with a low-cost desktop PowerPC as crucial to their success.
By the way, although IBM seems to have a real stuffed-shirt image, Watson
Research seems like a cool place. People there look just like us! Also,
it was cool to sit in the office of a guy who wrote probably the first
paper on Common Subexpression Elimination in a compiler.
In my early years at Symantec we always wrestled with the "THINK for fast
compiles, MPW for production code" image, one that Apple liked to
propagate, until we got serious in v5.0 and wrote a real code
generator. I don't want Metrowerks to be pigeonholed like that. For DR3
and probably DR4, we will be the "fast" compiler which makes some
concessions in the optimization area. (This has not stopped a large
number of commercial developers of well-known products from using
CodeWarrior to "go native")
After that, we intend to generate code as good as anybody else's.
-- John McEnerney, Metrowerks PowerPC Product Architect
+++++++++++++++++++++++++++
>From d88-jwa@hemul.nada.kth.se (Jon W‰tte)
Date: 9 Apr 1994 12:30:13 GMT
Organization: The Royal Institute of Technology
In <9404090108.AA09272@geweke.ppp.msu.edu> gewekean@studentg.msu.edu (Andrew Geweke) writes:
>Am I the only one saying Wow? I've heard only huge rave reviews about IBM's
>compilers, but figured they were only available with the Macintosh on RISC
>SDK. Great!
Nope, the Macintosh on RISC SDK uses the Lucid compiler, PPCC.
To use xlc, you have to have an IBM RS/6000 with the development
environment, figure on spending $15000 and upwards...
--
-- Jon W{tte, h+@nada.kth.se, Mac Hacker Deluxe --
Clearly, most humans are not rational beings; they are rationalizing beings.
-- Mel Walker
+++++++++++++++++++++++++++
>From johnmce@world.std.com (John McEnerney)
Date: Sun, 10 Apr 1994 04:24:59 GMT
Organization: The World Public Access UNIX, Brookline, MA
sw@network-analysis-ltd.co.uk (Sak Wathanasin) writes:
>> Metrowerks will ship its 680x0 and PowerPC compilers as fat binaries, so
>> both can run and generate code for either processor line. The MPW-hosted
>> compiler will be included free.
>Will this apply retrospectively to those of us who bought DR1 (2,3..)?
>Or do I have to buy the MPW-hosted compiler separately? If the latter, where
>do I get it from?
We'll just tack these onto the CD for DR3, DR4, etc. You'll ghet them
automatically (as long as you regstered!)
-- John McEnerney, Metrowerks PowerPC Product Architect
+++++++++++++++++++++++++++
>From sw@network-analysis-ltd.co.uk (Sak Wathanasin)
Date: Mon, 11 Apr 94 00:24:40 GMT
Organization: Network Analysis Ltd
In article <Co109o.E6F@world.std.com> (comp.sys.mac.programmer), johnmce@world.std.com (John McEnerney) writes:
> >Will this apply retrospectively to those of us who bought DR1 (2,3..)?
> >Or do I have to buy the MPW-hosted compiler separately? If the latter, where
> >do I get it from?
>
> We'll just tack these onto the CD for DR3, DR4, etc. You'll ghet them
> automatically (as long as you regstered!)
Do we have to wait for DR3 for the MPW-hosted compiler? I thought the press
release said that it would be released at the WWDC. I'd be happy to buy a
separate copy of the MPW-hosted compiler if it were available...
Sak Wathanasin
Network Analysis Limited
178 Wainbody Ave South, Coventry CV3 6BX, UK
Internet: sw@network-analysis-ltd.co.uk
uucp: ...!uknet!nan!sw AppleLink: NAN.LTD
Phone: (+44) 203 419996 Mobile:(+44) 850 587411 Fax: (+44) 203 690690
+++++++++++++++++++++++++++
>From johnmce@world.std.com (John McEnerney)
Date: Mon, 11 Apr 1994 07:03:19 GMT
Organization: The World Public Access UNIX, Brookline, MA
>Do we have to wait for DR3 for the MPW-hosted compiler? I thought the press
>release said that it would be released at the WWDC. I'd be happy to buy a
>separate copy of the MPW-hosted compiler if it were available...
DR3 is the version which we will be shipping at the WWDC! Of course,
since we will probably get it in the mail just as we ourselves are
leaving for WWDC, you might not get yours until after the WWDC depending
on shipping time etc.
-- John McEnerney, Metrowerks PowerPC Product Architect
+++++++++++++++++++++++++++
>From Robert Hess <robert_hess@macweek.ziff.com>
Date: Mon, 11 Apr 1994 16:44:35 GMT
Organization: MacWEEK
In article <9404090108.AA09272@geweke.ppp.msu.edu> Andrew Geweke, gewekean@studentg.msu.edu
writes:
>Thank you very much for this! There are obviously lots of people who still
>can't really get MacWEEK.
Well, keep in mind:
a) My employer won't let me post the full article;
b) This is going be as time permits.
So you're still better off getting the full scoop via MacWEEK or online.
========================================================================
Robert Hess, WEEKgeek robert_hess@macweek.ziff.com
MacWEEK AppleLink: WNDZSX
301 Howard CompuServe: 72511,333
San Francisco, Calif. 94105 America Online: MacWEEK
(415) 243-3576 days MCI: RHESS
(415) 243-3651 fax
(415) 647-5549 nights I speak for myself.
now doesn!t that make you feel better? And sometimes not even that.
========================================================================
+++++++++++++++++++++++++++
>From peter.lewis@info.curtin.edu.au (Peter N Lewis)
Date: Sun, 10 Apr 1994 12:27:59 +0800
Organization: NCRPDA, Curtin University
>Since developers feel Apple has not committed to continue supporting the
>language, Metrowerks will introduce an Object Pascal version of its
>compiler by year-end.
And there was much rejoicing! Now, what was the upgrade strategy for
this? If the upgrade from Pascal to Object Pascel is sufficiently cheap,
then I'd love to buy a copy now and help get the bugs out!
Peter.
_______________________________________________________________________
Peter N Lewis <peter.lewis@info.curtin.edu.au> Ph: +61 9 368 2055
+++++++++++++++++++++++++++
>From gurgle@netcom.com (Pete Gontier)
Date: Sun, 17 Apr 1994 04:22:07 GMT
Organization: cellular
peter.lewis@info.curtin.edu.au (Peter N Lewis) writes:
>>Since developers feel Apple has not committed to continue supporting the
>>language, Metrowerks will introduce an Object Pascal version of its
>>compiler by year-end.
>And there was much rejoicing! Now, what was the upgrade strategy for
>this? If the upgrade from Pascal to Object Pascel is sufficiently cheap,
>then I'd love to buy a copy now and help get the bugs out!
Since the license for DR2 includes updates through DR5 or so, and since
DR5 isn't supposed to ship this year, and since Object Pascal *is*
supposed to ship this year, my guess is that buying CodeWarrior now is
sufficient. Metrowerks may not have thought along this precise path, so
when you call them to confirm, mention it.
--
Pete Gontier, CTO, Integer Poet Software; gurgle@netcom.com
+++++++++++++++++++++++++++
>From mwron@aol.com (MW Ron)
Date: 17 Apr 1994 16:24:02 -0400
Organization: America Online, Inc. (1-800-827-6364)
In article <gurgleCoDysv.8w6@netcom.com>, gurgle@netcom.com (Pete Gontier)
writes:
>> Since the license for DR2 includes updates through DR5 or so, and since
DR5 isn't supposed to ship this year, and since Object Pascal *is*
supposed to ship this year, my guess is that buying CodeWarrior now is
sufficient.
Right, Every CD will include the latest compiler versions available. With more
source codes and 3rd party demos and tools. If you purchase the DR\2
pre-release version you will receive DR\3. DR\4, DR\5 as well, these CD's will
come out every 4 months.
The only upgrading necessary could be from a Bronze to a Gold if you needed to
write for a PowerPC later on.
Ron Liechty
mwron@aol.com
Metrowerks Inc.
---------------------------
>From greer@utdallas.edu (Dale M. Greer)
Subject: WaitNextEvent Emulated on PoMac!?
Date: 11 Apr 1994 15:50:35 GMT
Organization: The University of Texas at Dallas
Someone on the CodeWarrior mailing list said that WaitNextEvent runs
in emulation mode on the Power Macintosh. This was in response to
a programmer frustrated by jerky animation on the Power Mac. It was
recommended that he put code to call WaitNextEvent after some number of
passes through the event loop, say every tenth pass.
It seems like WaitNextEvent would be one of the most frequently used
routines by most applications, so why didn't Apple make it native? Will
it be native for System 7.5?
--
Dale Greer, greer@utdallas.edu
+++++++++++++++++++++++++++
>From fixer@faxcsl.dcrt.nih.gov (Chris Gonna' Find Ray Charles Tate)
Date: Mon, 11 Apr 1994 16:34:10 GMT
Organization: DCRT, NIH, Bethesda, MD
In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M. Greer) writes:
>
>Someone on the CodeWarrior mailing list said that WaitNextEvent runs
>in emulation mode on the Power Macintosh. This was in response to
>a programmer frustrated by jerky animation on the Power Mac. It was
>recommended that he put code to call WaitNextEvent after some number of
>passes through the event loop, say every tenth pass.
>
>It seems like WaitNextEvent would be one of the most frequently used
>routines by most applications, so why didn't Apple make it native? Will
>it be native for System 7.5?
I expect it's *because* it's one of the most-called routines. If it were
native, then *every time* an emulated application called it would entail
at least two mode switches (into native to run the trap, then back out
again to run the application). Mode switching is expensive.
Now, it *could* be that the trap is run native when you're running in
native mode, but emulated when you're running under the emulator; it seems
to me this would be optimal. Does anyone know whether this is indeed the
case under the current PowerMac system software?
- -------------------------------------------------------------------
Christopher Tate | "Blue ice cubes? How degenerate!"
MSD, Inc. |
fixer@faxcsl.dcrt.nih.gov | < anybody recognize the source? >
+++++++++++++++++++++++++++
>From Erik Schwiebert <evs1@cornell.edu>
Date: 11 Apr 1994 18:12:43 GMT
Organization: Cornell University
In article <1994Apr11.163410.6724@alw.nih.gov> Chris Gonna' Find Ray
Charles Tate, fixer@faxcsl.dcrt.nih.gov writes:
>In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M.
Greer) writes:
>>
>>Someone on the CodeWarrior mailing list said that WaitNextEvent runs
>>in emulation mode on the Power Macintosh. This was in response to
>>a programmer frustrated by jerky animation on the Power Mac. It was
>>recommended that he put code to call WaitNextEvent after some number of
>>passes through the event loop, say every tenth pass.
>>
>>It seems like WaitNextEvent would be one of the most frequently used
>>routines by most applications, so why didn't Apple make it native?
Will
>>it be native for System 7.5?
>
>I expect it's *because* it's one of the most-called routines. If it were
>native, then *every time* an emulated application called it would entail
>at least two mode switches (into native to run the trap, then back out
>again to run the application). Mode switching is expensive.
>
>Now, it *could* be that the trap is run native when you're running in
>native mode, but emulated when you're running under the emulator; it
seems
>to me this would be optimal. Does anyone know whether this is indeed the
>case under the current PowerMac system software?
well, according to the example in New Inside Mac: PowerPC Software (or
whatever the title is), Apple gives an example that shows exactly what
Dale Greer said. ie, the code only calls WNE every once in a while. I
dont have the book, but it looked something like this:
procedure mainloop;
var theEvent:eventRecord;
begin
if (tickCount - gTimeOfLastCall) > gTimeToWait then begin
gotEvent := waitNextEvent(blah, blah, blah ...)
gTimeOfLastCall := tickCount;
else
gotEvent := false;
if gotEvent then
case whatever of whatever
etc...
end;
anyways, you get the idea... where gTimeToWait is 10 ticks or something
like that (getCaretTime maybe?)
- -----------------------------------------------------------------
"So live that you can |------------------| "Life is a tragedy for
look any man in the | evs1@cornell.edu | those who feel, and a
eye and tell him |------------------| comedy for those who
go to hell." | Erik V. | think."
-- Anonymous | Schwiebert | -- Jean De La Bruyere
- -----------------------------------------------------------------
+++++++++++++++++++++++++++
>From jwbaxter@olympus.net (John W. Baxter)
Date: Mon, 11 Apr 1994 11:01:28 -0700
Organization: Internet for the Olympic Peninsula
In article <1994Apr11.163410.6724@alw.nih.gov>, fixer@faxcsl.dcrt.nih.gov
(Chris Gonna' Find Ray Charles Tate) wrote:
> In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M. Greer) writes:
> >
> >Someone on the CodeWarrior mailing list said that WaitNextEvent runs
> >in emulation mode on the Power Macintosh. This was in response to
> >a programmer frustrated by jerky animation on the Power Mac. It was
> >recommended that he put code to call WaitNextEvent after some number of
> >passes through the event loop, say every tenth pass.
> >
>
> I expect it's *because* it's one of the most-called routines. If it were
> native, then *every time* an emulated application called it would entail
> at least two mode switches (into native to run the trap, then back out
> again to run the application). Mode switching is expensive.
>
> Now, it *could* be that the trap is run native when you're running in
> native mode, but emulated when you're running under the emulator; it seems
> to me this would be optimal. Does anyone know whether this is indeed the
> case under the current PowerMac system software?
It is possible to create "fat" traps...run 68K or PPC. It was done for
several traps which **are unlikely to be patched**. It's not clear that
existing apps which patch traps can deal with the fat ones. Of course, no
one ever patches WaitNextEvent, and everyone who does so does it "right",
and will instantly retrofit "fat" patches.
--
John Baxter Port Ludlow, WA, USA [West shore, Puget Sound]
jwbaxter@pt.olympus.net
+++++++++++++++++++++++++++
>From sbarta@magnus.acs.ohio-state.edu (Scott Barta)
Date: 11 Apr 1994 15:33:23 -0400
Organization: The Ohio State University
> well, according to the example in New Inside Mac: PowerPC Software (or
> whatever the title is), Apple gives an example that shows exactly what
> Dale Greer said. ie, the code only calls WNE every once in a while. I
> dont have the book, but it looked something like this:
>
[code deleted]
> anyways, you get the idea... where gTimeToWait is 10 ticks or something
> like that (getCaretTime maybe?)
There's one big problem with all of this. While your application is
burning up cycles waiting to do its next WNE, it's _not_ giving up cycles
to other applications. Very unfriendly. I'm surprised that Apple is
advocating this, unless they're thinking ahead to some happy day when
applications will be able to preempt each other without WNE. I would think
that you'd just want to call WNE as often as possible and grit your teeth
through the mode switches until the needed Toolbox calls go
native...shucks, your program may not be fully _debugged_ by then. :-)
--
--Scott Barta
--sbarta@magnus.acs.ohio-state.edu
+++++++++++++++++++++++++++
>From b-clark@nwu.edu (Brian Clark)
Date: Mon, 11 Apr 1994 16:33:16 -0500
Organization: Northwestern University
In article <199404111933.PAA15286@bottom.magnus.acs.ohio-state.edu>,
sbarta@magnus.acs.ohio-state.edu (Scott Barta) wrote:
> There's one big problem with all of this. While your application is
> burning up cycles waiting to do its next WNE, it's _not_ giving up cycles
> to other applications. Very unfriendly. I'm surprised that Apple is
> advocating this, unless they're thinking ahead to some happy day when
> applications will be able to preempt each other without WNE. I would think
> that you'd just want to call WNE as often as possible and grit your teeth
> through the mode switches until the needed Toolbox calls go
> native...shucks, your program may not be fully _debugged_ by then. :-)
A recent develop had a question on this, I believe. Someone had a app that
did a calculation, called WNE, did another calc, etc. When translated to
native code, more time was being after yielding to other apps than to
perform calculations. The suggestion was to call WNE less often, based on
some fixed timing schedule, and not on how fast or slow a particular series
of calculations took. This seems to be perfectly defensible.
+++++++++++++++++++++++++++
>From ivanski@world.std.com (Ivan M CaveroBelaunde)
Date: Mon, 11 Apr 1994 21:53:59 GMT
Organization: The World Public Access UNIX, Brookline, MA
Erik Schwiebert <evs1@cornell.edu> writes:
>In article <1994Apr11.163410.6724@alw.nih.gov> Chris Gonna' Find Ray
>Charles Tate, fixer@faxcsl.dcrt.nih.gov writes:
>>In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M.
>Greer) writes:
>>>Someone on the CodeWarrior mailing list said that WaitNextEvent runs
>>>in emulation mode on the Power Macintosh. This was in response to
>>>a programmer frustrated by jerky animation on the Power Mac. It was
>>>recommended that he put code to call WaitNextEvent after some number of
>>>passes through the event loop, say every tenth pass.
>well, according to the example in New Inside Mac: PowerPC Software (or
>whatever the title is), Apple gives an example that shows exactly what
>Dale Greer said. ie, the code only calls WNE every once in a while. I
>dont have the book, but it looked something like this:
>procedure mainloop;
> var theEvent:eventRecord;
>begin
> if (tickCount - gTimeOfLastCall) > gTimeToWait then begin
> gotEvent := waitNextEvent(blah, blah, blah ...)
> gTimeOfLastCall := tickCount;
> else
> gotEvent := false;
> if gotEvent then
> case whatever of whatever
> etc...
>end;
It's kind of nasty (since it hogs the machine while you do nothing, because
gotEvent is hard-set to false if WNE is not called). A big problem,
I see, is that GetOSEvent and OSEventAvail are emulated - a good
alternative would have been to use those to process events while in
the foreground (this makes your app hog the machine while it is in front,
but it's processing user interactions, not sitting in an idle loop like
the code above; of course, if you're not in the foreground you should
relinqueish the CPU ASAP).
I could easily see the rationale for WNE/GNE being emulated that the
likelihood of a Mixed Mode Switch when doing the process swap is
exceedingly high anyway (I think the device manager is still emulated,
and WNE calls SystemTask). But hogging the machine AND not responding
to user events strikes me as unnecessarily evil.
I do hope the event handling (OS Event Mgr, Toolbox, Device Mgr) goes fat
(not native, too many 68K emulated apps would suffer performance problems)
in the next release - would go a long way towards easing that problem.
-Ivan
- -
Ivan Cavero Belaunde (ivanski@world.std.com)
Avid VideoShop Project Lead
Avid Technology, Inc.
+++++++++++++++++++++++++++
>From greer@utdallas.edu (Dale M. Greer)
Date: 11 Apr 1994 22:24:03 GMT
Organization: The University of Texas at Dallas
Brian Clark (b-clark@nwu.edu) wrote:
> In article <199404111933.PAA15286@bottom.magnus.acs.ohio-state.edu>,
> sbarta@magnus.acs.ohio-state.edu (Scott Barta) wrote:
> > There's one big problem with all of this. While your application is
> > burning up cycles waiting to do its next WNE, it's _not_ giving up cycles
> > to other applications. Very unfriendly. I'm surprised that Apple is
> A recent develop had a question on this, I believe. Someone had a app that
> did a calculation, called WNE, did another calc, etc. When translated to
> native code, more time was being after yielding to other apps than to
> perform calculations. The suggestion was to call WNE less often, based on
> some fixed timing schedule, and not on how fast or slow a particular series
> of calculations took. This seems to be perfectly defensible.
Wouldn't it be nice if Apple had made a new GetMyPriority function, which
would get a value from a new resource which would tell your code how many
ticks to wait before calling WaitNextEvent. Of course, the success of this
would depend on everyone using it, but if they did, then the user could set
priorities for each application as easily as setting the memory
requirements. Theoretically. ;)
As an alternative to having the programmer provide the waiting logic,
why couldn't Apple have made a little piece of code to call GetMyPriority,
or something similar just before calling the emulated WaitNextEvent? This
little piece of code could just return until its timer timed out, when
it would then act like a regular call to WaitNextEvent.
--
Dale Greer, greer@utdallas.edu
+++++++++++++++++++++++++++
>From lsr@taligent.com (Larry Rosenstein)
Date: Mon, 11 Apr 1994 22:46:20 GMT
Organization: Taligent, Inc.
In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M.
Greer) wrote:
> Someone on the CodeWarrior mailing list said that WaitNextEvent runs
> in emulation mode on the Power Macintosh. This was in response to
A good application will call WaitNextEvent with the appropriate sleep
value, which means it doesn't get called as often as you'd think.
> recommended that he put code to call WaitNextEvent after some number of
> passes through the event loop, say every tenth pass.
That might be appropriate for animation where you want to maintain control
as much as possible. I don't think you'd want to do this based on number
of passes, but rather based on elapsed time as someone suggested.
--
Larry Rosenstein
Taligent, Inc.
lsr@taligent.com
+++++++++++++++++++++++++++
>From leblonk@netcom.com (Marcel Blonk)
Date: Tue, 12 Apr 1994 00:12:32 GMT
Organization: NETCOM On-line Communication Services (408 241-9760 guest)
Dale M. Greer (greer@utdallas.edu) wrote:
: It seems like WaitNextEvent would be one of the most frequently used
: routines by most applications, so why didn't Apple make it native? Will
: it be native for System 7.5?
Most time spent in WNE, as seen from an app, is actually spent in the
other (background) apps that call WNE. Jerky animation and such, is caused
by other apps taking up too much time in the background (read: calling
WNE only every once in a while). The actual time spent in WNE itself is
negligible, therefore I can understand that apple doesn't make it a
priority to natify (from the verb 'to native') WNE (compare eg. the
average app spends 70% of it's time in DrawText)
mb
+++++++++++++++++++++++++++
>From steeeve@aol.com (Steeeve)
Date: 12 Apr 1994 03:12:27 -0400
Organization: America Online, Inc. (1-800-827-6364)
In article <2obrkb$2i8@news.utdallas.edu>, greer@utdallas.edu (Dale M. Greer)
writes:
>>>>
Someone on the CodeWarrior mailing list said that WaitNextEvent runs
in emulation mode on the Power Macintosh.
<<<<
I just finished up some code from which I expected to see a big speed gain on
the Power Mac, but it turned out to be slower than on a Quadra 800. I was
essentially doing this:
do some calculations;
fall through event loop;
I realized that in this case the only reasonable event was a mouse click, so I
changed it to
while( ! Button() )
do some calculations;
flush any other events; //so that the click is processed
fall through event loop;
Of course I probably should have done it like this in the first place, but on a
6100 it went from 190,000 calculations per hour to 1,475,000.
-Steve
+++++++++++++++++++++++++++
>From woody@alumni.caltech.edu (William Edward Woody)
Date: 12 Apr 1994 07:44:53 GMT
Organization: California Institute of Technology, Alumni Association
In article <199404111933.PAA15286@bottom.magnus.acs.ohio-state.edu>,
Scott Barta <sbarta@magnus.acs.ohio-state.edu> wrote:
>> well, according to the example in New Inside Mac: PowerPC Software (or
>> whatever the title is), Apple gives an example that shows exactly what
>> Dale Greer said. ie, the code only calls WNE every once in a while. I
>> dont have the book, but it looked something like this:
>>
> [code deleted]
>> anyways, you get the idea... where gTimeToWait is 10 ticks or something
>> like that (getCaretTime maybe?)
>
>
>There's one big problem with all of this. While your application is
>burning up cycles waiting to do its next WNE, it's _not_ giving up cycles
>to other applications. Very unfriendly. I'm surprised that Apple is
>advocating this, unless they're thinking ahead to some happy day when
>applications will be able to preempt each other without WNE. I would think
>that you'd just want to call WNE as often as possible and grit your teeth
>through the mode switches until the needed Toolbox calls go
>native...shucks, your program may not be fully _debugged_ by then. :-)
Actually it turns out to be an extremely reasonable thing to do if you
want your application to get as much of the CPU as possible while yielding
in a way which feels very responsive to foreground applications.
If you make gTimeToWait 15 ticks, then when the user starts typing in the
foreground application he will be forced to wait no longer than 1/4
second before his application responds; for most applications users
won't feel a significant delay in the responsiveness of the application.
And since WNE won't return to the CPU-intensive application until there
is a delay in events arriving at the foreground application (such as when
the user pauses a second to think while typing in Microsoft Word),
the foreground application will get all the CPU needed to respond to the
user's typing or drawing.
I've used this technique in quite a few applications and have been
quite pleased at the amount of CPU my background CPU-intensive application
gets, while still getting reasonable responsiveness in the foreground
application.
- Bill
(Who isn't quite sure he understands why pre-emptive multi-tasking
is so hot, given how unresponsive a Sun workstation feels compared
to his less powerful Macintosh.)
--
"A secret face--a touch of grace William Edward Woody
A man must learn to give a little space woody@alumni.cco.caltech.edu
A peaceful state--a submissive trait
A man must learn to gently dominate" -- Rush, "Animate"
+++++++++++++++++++++++++++
>From d88-jwa@mumrik.nada.kth.se (Jon W‰tte)
Date: 12 Apr 1994 08:44:59 GMT
Organization: The Royal Institute of Technology
In <2obrkb$2i8@news.utdallas.edu> greer@utdallas.edu (Dale M. Greer) writes:
>It seems like WaitNextEvent would be one of the most frequently used
>routines by most applications, so why didn't Apple make it native? Will
>it be native for System 7.5?
Wrong. WaitNextEvent isn't that important; when applications call it,
they expect some time to pass (since other apps can get switched in
during the call)
The real power suckers were DrawText() and FillRect() (==EraseRect())
plus a couple of others (the memory manager in some cases :-)
--
-- Jon W{tte, h+@nada.kth.se, Mac Hacker Deluxe --
This article printed on 100% recycled electrons.
+++++++++++++++++++++++++++
>From neeri@iis.ee.ethz.ch (Matthias Neeracher)
Date: 14 Apr 94 11:05:29
Organization: Integrated Systems Laboratory, ETH, Zurich
In article <leblonkCo4Dww.JKp@netcom.com>, leblonk@netcom.com (Marcel Blonk) writes:
> Dale M. Greer (greer@utdallas.edu) wrote:
> : It seems like WaitNextEvent would be one of the most frequently used
> : routines by most applications, so why didn't Apple make it native? Will
> : it be native for System 7.5?
> Most time spent in WNE, as seen from an app, is actually spent in the
> other (background) apps that call WNE.
This is true to a certain degree. However, excessive calling of WNE
*while the application still has something to do* may slow down your
code considerably.
Matthias
- ---
Matthias Neeracher neeri@iis.ee.ethz.ch
"Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes
and weighs 30 tons, computers in the future may have only 1,000 vacuum
tubes and weigh only 1 1/2 tons." ---Popular Mechanics, March 1949
+++++++++++++++++++++++++++
>From leblonk@netcom.com (Marcel Blonk)
Date: Thu, 14 Apr 1994 19:05:26 GMT
Organization: NETCOM On-line Communication Services (408 241-9760 guest)
Matthias Neeracher (neeri@iis.ee.ethz.ch) wrote:
: In article <leblonkCo4Dww.JKp@netcom.com>, leblonk@netcom.com (Marcel Blonk) writes:
: > Dale M. Greer (greer@utdallas.edu) wrote:
: > : It seems like WaitNextEvent would be one of the most frequently used
: > : routines by most applications, so why didn't Apple make it native? Will
: > : it be native for System 7.5?
: > Most time spent in WNE, as seen from an app, is actually spent in the
: > other (background) apps that call WNE.
: This is true to a certain degree. However, excessive calling of WNE
: *while the application still has something to do* may slow down your
: code considerably.
True, but the issue here is, that to make the WNE code native, wouldn't
do much to improve performance. Not calling WNE too much has always been
an issue on the mac, way before the PowerMac.
mb
+++++++++++++++++++++++++++
>From Jens Alfke <jens_alfke@powertalk.apple.com>
Date: Mon, 18 Apr 1994 20:07:43 GMT
Organization: Apple Computer
On any reasonably fast Mac it's a bad idea to call WNE too often; not that
the implentation itself is slow, but there are limitations in the OS on how
fast process switches can happen, so when you call WNE you should expect to
be gone for at least a tick or two if there are any other non-sleeping
processes on that machine.
Scott Barta, sbarta@magnus.acs.ohio-state.edu writes:
> There's one big problem with all of this. While your application is
> burning up cycles waiting to do its next WNE, it's _not_ giving up cycles
> to other applications. Very unfriendly. I'm surprised that Apple is
Well they're not advocating calling it only once a minute! It's probably best
to call WNE about once a second max while you're in the foreground. If you're
in the background you may want to call it four times a second or so. If you
call WNE too often you're also giving up lots of cycles to a loop inside the
Process Manager that waits for TickCount to advance.
--Jens Alfke
jens_alfke@powertalk Rebel girl, rebel girl,
.apple.com Rebel girl you are the queen of my world
+++++++++++++++++++++++++++
>From Dave Falkenburg <falken@apple.com>
Date: Mon, 18 Apr 1994 20:54:51 GMT
Organization: Apple Computer, Inc.
In article <1994Apr18.200743.26643@gallant.apple.com> Jens Alfke,
jens_alfke@powertalk.apple.com writes:
>Well they're not advocating calling it only once a minute! It's probably
best
>to call WNE about once a second max while you're in the foreground. If
you're
>in the background you may want to call it four times a second or so. If
you
You should ALWAYS dynamically calculate the sleep time!
When in the background, err on the side of calling WNE more than you'd
like with LARGE sleep values.
When running in the foreground, you should periodically call through, but
alter the frequency of your calling through if you are doing something
very compute-bound.
If you AREN'T compute bound, always call through... In most cases, the
worst thing this will do is pollute your instruction cache with other
people's code.
Of course, if you are doing something USER-bound (like a word processor)
you probably always want to call through anyway.
>call WNE too often you're also giving up lots of cycles to a loop inside
the
>Process Manager that waits for TickCount to advance.
Actually, I usually don't disagree with Jens, but this ONLY happens when
NO EVENTS are flying around and EVERY process is asleep... In the
future, when we have a "real" operating system, we'll block instead...
-Dave Falkenburg
-Apple Computer, Inc.
---------------------------
>From Jeff DuMonthier <jeff.dumonthier@gsfc.nasa.gov>
Subject: X2Fix code generation bug still in SC++ 7.0
Date: 6 Apr 1994 14:54:33 GMT
Organization: NASA GSFC
I recently posted sample code which demonstrated a code generation bug
in SC++ 6.0.1. I have updated to 7.0 and the bug is still there, with
maybe a slight difference. The following code demonstrates two
variations:
#include <fixmath.h>
Fixed FixIt1(extended x)
{
Fixed f = X2Fix(x); //< This works
return f;
}
Fixed FixIt2(extended *x)
{
Fixed f = X2Fix(*x); //< This just fails.
return f;
}
void main(void)
{
extended x = 1.0;
extended *xp = &x;
Fixed f1 = FixIt1(x);
Fixed f2 = FixIt2(&x);
Fixed f3 = X2Fix(x);
Fixed f4 = X2Fix(*xp); //< Illegal instruction.
}
I started with a C++ project and used the factory default compilation
options for the project and for rebuilding the libraries. The
following behavior is what I observed tracing through the program with
the source debugger:
FixIt1 works correctly and f1 will be assigned 0x00010000. FixIt2 does
not work and f2 will be assigned 0 (local variable f in FixIt2 is also
assigned 0). The assignment to f3 using X2Fix(x) works but
f4 = X2Fix(*xp) results in an illegal instruction error message (run
time, not a syntax error).
Here is the disassembled code:
FixIt1(long double):
00000000: 4E56 0000 LINK A6,#$0000
00000004: 2F03 MOVE.L D3,-(A7)
00000006: 594F SUBQ.W #$4,A7
00000008: 486E 0008 PEA $0008(A6)
0000000C: A844 _X2Fix
0000000E: 201F MOVE.L (A7)+,D0
00000010: 2600 MOVE.L D0,D3
00000012: 261F MOVE.L (A7)+,D3
00000014: 4E5E UNLK A6
00000016: 205F MOVEA.L (A7)+,A0
00000018: 4FEF 000A LEA $000A(A7),A7
0000001C: 4ED0 JMP (A0)
0000001E
FixIt2(long double *):
00000000: 4E56 0000 LINK A6,#$0000
00000004: 2F03 MOVE.L D3,-(A7)
00000006: 594F SUBQ.W #$4,A7
00000008: 486E 0008 PEA $0008(A6)
0000000C: A844 _X2Fix
0000000E: 201F MOVE.L (A7)+,D0
00000010: 2600 MOVE.L D0,D3
00000012: 261F MOVE.L (A7)+,D3
00000014: 4E5E UNLK A6
00000016: 205F MOVEA.L (A7)+,A0
00000018: 584F ADDQ.W #$4,A7
0000001A: 4ED0 JMP (A0)
0000001C
main:
00000000: 4E56 FFF4 LINK A6,#$FFF4
00000004: 48E7 1E30 MOVEM.L D3-D6/A2/A3,-(A7)
00000008: 2D7C 3FFF 8000 MOVE.L #$3FFF8000,$FFF4(A6)
FFF4
00000010: 42AE FFF8 CLR.L $FFF8(A6)
00000014: 426E FFFC CLR.W $FFFC(A6)
00000018: 45EE FFF4 LEA $FFF4(A6),A2
0000001C: 264A MOVEA.L A2,A3
0000001E: 41EE FFF4 LEA $FFF4(A6),A0
00000022: 3F28 0008 MOVE.W $0008(A0),-(A7)
00000026: 2F28 0004 MOVE.L $0004(A0),-(A7)
0000002A: 2F10 MOVE.L (A0),-(A7)
0000002C: 4EBA 0000 JSR FixIt1(long double)
00000030: 2600 MOVE.L D0,D3
00000032: 486E FFF4 PEA $FFF4(A6)
00000036: 4EBA 0000 JSR FixIt2(long double *)
0000003A: 2800 MOVE.L D0,D4
0000003C: 594F SUBQ.W #$4,A7
0000003E: 486E FFF4 PEA $FFF4(A6)
00000042: A844 _X2Fix
00000044: 201F MOVE.L (A7)+,D0
00000046: 2A00 MOVE.L D0,D5
00000048: 594F SUBQ.W #$4,A7
0000004A: 484B BKPT #$3
0000004C: A844 _X2Fix
0000004E: 201F MOVE.L (A7)+,D0
00000050: 2C00 MOVE.L D0,D6
00000052: 4CDF 0C78 MOVEM.L (A7)+,D3-D6/A2/A3
00000056: 4E5E UNLK A6
00000058: 4E75 RTS
0000005A
I don't know 68000 assembler, but I can see that FixIt1 and FixIt2 are
identical up to the instruction before returning. This does not seem
correct since one is passed a pointer and one is passed a 10 byte
extended value. Just before the last _X2Fix in main is this
instruction: BKPT. Is that the illegal instruction? What is it?
The workaround as with the 6.0.1 version of the bug is to always
use X2Fix on a local copy of an extended value, not a pointer or a
reference.
+++++++++++++++++++++++++++
>From N.Perry@massey.ac.nz (N.Perry)
Date: Wed, 13 Apr 1994 09:08:22 GMT
Organization: School of Maths & Info. Sci., Massey University, Palmerston North, NZ
Jeff DuMonthier <jeff.dumonthier@gsfc.nasa.gov> has posted that a bug
in the compilation of extended *arg being passed to X2Fix is still in
7.0. I looked into this and discovered that the problem is even worse
than Jeff thought :-( The following function:
Fixed FixIt5(extended *x)
{
extended *h = x;
Fixed f = X2Fix(*h); //< ouch!
return f;
}
produces the code:
FixIt5(long double *):
00000000: 4E56 0000 LINK A6,#$0000
00000004: 48E7 1020 MOVEM.L D3/A2,-(A7)
00000008: 202E 0008 MOVE.L $0008(A6),D0
0000000C: 2440 MOVEA.L D0,A2
0000000E: 594F SUBQ.W #$4,A7
00000010: 484A BKPT #$2
00000012: A844 _X2Fix
00000014: 201F MOVE.L (A7)+,D0
00000016: 2600 MOVE.L D0,D3
00000018: 4CDF 0408 MOVEM.L (A7)+,D3/A2
0000001C: 4E5E UNLK A6
0000001E: 205F MOVEA.L (A7)+,A0
00000020: 584F ADDQ.W #$4,A7
00000022: 4ED0 JMP (A0)
Now a BKPT is not very good for your Mac - I think a crash is
inevitable :-( (For 68K hackers, the hex 484A looks like an attempt to
code up PEA (A2), a non-existant instruction...)
I'll send it off to Symantec tech support.
Hope this helps someone *before* their Mac locks up!
Cheers,
Nigel
--
Dr Nigel Perry Email: N.Perry@massey.ac.nz
Department of Computer Science Tel: +64 6 356 9099 ext 8900
Massey University Fax: +64 6 350 5611
Palmerston North, New Zealand
+++++++++++++++++++++++++++
>From Ron_Hunsinger@bmug.org (Ron Hunsinger)
Date: Sat, 16 Apr 94 17:20:27 PST
Organization: Berkeley Macintosh Users Group
N.Perry@massey.ac.nz (N.Perry) writes:
>Now a BKPT is not very good for your Mac - I think a crash is
>inevitable :-( (For 68K hackers, the hex 484A looks like an attempt to
>code up PEA (A2), a non-existant instruction...)
PEA (A2) is a perfectly valid instruction, exactly equivalent in speed,
code size, and function to MOVE.L A2,-(A7). Either would have been
correct in this sequence.
I think you meant to say "484A looks like an attempt to code up PEA A2,
which is a non-existent instruction."
(Actually, it looks like they were trying to split the difference between
PEA (A2) [4852] and MOVE.L A2,-(A7) [1F0A]. They got the sum of 4840 [PEA]
and 000A [A2]. If they had started with 1F00 [MOVE.L ,-(A7)], or added
0012 [(A2)], they would have been OK.)
-Ron Hunsinger
+++++++++++++++++++++++++++
>From pottier@kayak.ens.fr (Francois Pottier)
Date: 17 Apr 1994 21:26:59 GMT
Organization: Ecole Normale Superieure, PARIS, France
In article <0013C774.fc@bmug.org>,
Ron Hunsinger <Ron_Hunsinger@bmug.org> wrote:
>(Actually, it looks like they were trying to split the difference between
>PEA (A2) [4852] and MOVE.L A2,-(A7) [1F0A]. They got the sum of 4840 [PEA]
>and 000A [A2]. If they had started with 1F00 [MOVE.L ,-(A7)], or added
>0012 [(A2)], they would have been OK.)
Do you guys really know all these opcodes by heart ? I'm amazed!
--
Francois Pottier
pottier@dmi.ens.fr
---------------------------
End of C.S.M.P. Digest
**********************